package m1;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;


import java.util.Scanner;

//发送同步消息
public class Producer { //生产者
    public static void main(String[] args) throws Exception {
        //创建生产者对象
         /*
        group 相同的生产者成为一个生产者组

        标识发送同一类消息的Producer，通常发送逻辑一致。
        发送普通消息的时候，仅标识使用，并无特别用处。

        若发送事务消息，发送某条消息的producer-A宕机，
        使得事务消息一直处于PREPARED状态并超时，
        则broker会回查同一个group的其他producer，
        确认这条消息应该commit还是rollback。

        但开源版本并不完全支持事务消息（阉割了事务回查的代码）。?????
         */
        DefaultMQProducer p = new DefaultMQProducer("prod-group1");
        //设置name server
         /*
        连接nameserver集群, 获得注册的broker信息
         */
        p.setNamesrvAddr("192.168.64.141:9876");
        //启动,连接
        p.start();
        //创建消息封装对象 Message(Topic,Tag,消息数据)
        //发送
        while (true){
            System.out.print("输入消息: ");
            String s = new Scanner(System.in).nextLine();
            //Topic相当于是一级分类,Tag相当于是二级分类
            Message msg = new Message("Topic1", "TagA", s.getBytes());
            SendResult r = p.send(msg);// 发送消息后会得到服务器反馈,
            // 包含: smsgId, sendStatus, queue, queueOffset, offsetMsgId
            System.out.println(r);
        }
        //启动生产者,去连接name server  获得地址列表,去连接生产服务器

    }
}
